package com.集合.Collection___.Set_.HashSet__;

import java.util.HashSet;
import java.util.Set;
@SuppressWarnings("all")
public class HashSet全面说明 {
    public static void main(String[] args) {
        /** HashSet 底层实际上是 HashMap；
         * public HashSet() {
         *         map = new HashMap<>();
         *     }
         *
         *1.Set接口的实现类是无序的(添加和取出的顺序不一致),没有索引；
         *2.不允许重复元素(重复对象)，即： 对象不同可以添加，反之 如果重复了不会添加到set集合；返回false;
         *3.和List接口一样 Set接口也是Collection的子接口，因此，常用方法和Collection一样；
         *4.Set接口的遍历方式：
         *  4.1迭代器 iterator
         *  4.2增强for循环（底层还是迭代器）
         *  不能用普通for循环，因为没有索引；
         *5.set集合输出是无序的但每次输出是固定的；即：输入和输出不一定一致，但第一次输出和第二次输出是一样的顺序；
         */
        Set hashSet = new HashSet();
        hashSet.add(2);//可以传进去，
        hashSet.add(2);//不能添加，重复了；
        hashSet.add("hsp-1");//可以添加；
        hashSet.add("hsp-1");//不能添加，重复；
        /**不同的对象就能传进去，即：元素的哈希值不同，就可以添加，即使内容一样   例如：两个tom是不同的对象，就能传进去*/
        hashSet.add(new Dog("tom"));//可以添加，
        hashSet.add(new Dog("tom"));//可以添加；

        System.out.println(hashSet);
        System.out.println((new Dog("hsp")).hashCode());//哈希值不一样
        System.out.println((new Dog("hsp")).hashCode());//哈希值不一样

    }
}
class Dog{
    String name;

    public Dog(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }

}